package com.ruoyi.finance.service.impl;

import java.util.List;
import java.util.Random;

import cn.hutool.core.util.RandomUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.finance.domain.VoucherTemplateDetail;
import com.ruoyi.finance.domain.VoucherTemplateType;
import com.ruoyi.finance.mapper.VoucherTemplateDetailMapper;
import com.ruoyi.finance.vo.TemPlateDTO;
import com.ruoyi.finance.vo.VoucherDetailVo;
import com.ruoyi.finance.vo.VoucherTemplateVO;
import org.apache.commons.lang3.RandomUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.finance.mapper.VoucherTemplateMapper;
import com.ruoyi.finance.domain.VoucherTemplate;
import com.ruoyi.finance.service.IVoucherTemplateService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 发票凭证模板Service业务层处理
 *
 * @author ruoyi
 * @date 2025-03-03
 */
@Service
public class VoucherTemplateServiceImpl implements IVoucherTemplateService
{
    @Autowired
    private VoucherTemplateMapper voucherTemplateMapper;

    @Autowired
    private VoucherTemplateDetailMapper voucherTemplateDetailMapper;

    /**
     * 查询发票凭证模板
     *
     * @param templateId 发票凭证模板主键
     * @return 发票凭证模板
     */

    /**
     * 查询发票凭证模板列表
     *
     * @param voucherTemplate 发票凭证模板
     * @return 发票凭证模板
     */
    @Override
    public List<VoucherTemplate> selectVoucherTemplateList(VoucherTemplate voucherTemplate)
    {
        return voucherTemplateMapper.selectVoucherTemplateList(voucherTemplate);
    }

    /**
     * 新增发票凭证模板
     *
     * @param voucherTemplate 发票凭证模板
     * @return 结果
     */
    @Override
    public int insertVoucherTemplate(VoucherTemplate voucherTemplate)
    {
        voucherTemplate.setCreateTime(DateUtils.getNowDate());
        return voucherTemplateMapper.insertVoucherTemplate(voucherTemplate);
    }

    /**
     * 修改发票凭证模板
     *
     * @param voucherTemplate 发票凭证模板
     * @return 结果
     */
    @Override
    public int updateVoucherTemplate(VoucherTemplate voucherTemplate)
    {
        return voucherTemplateMapper.updateVoucherTemplate(voucherTemplate);
    }

    /**
     * 批量删除发票凭证模板
     *
     * @param templateIds 需要删除的发票凭证模板主键
     * @return 结果
     */
    @Override
    public int deleteVoucherTemplateByTemplateIds(Long[] templateIds)
    {
        return voucherTemplateMapper.deleteVoucherTemplateByTemplateIds(templateIds);
    }

    /**
     * 删除发票凭证模板信息
     *
     * @param templateId 发票凭证模板主键
     * @return 结果
     */
    @Override
    public int deleteVoucherTemplateByTemplateId(Long templateId)
    {
        return voucherTemplateMapper.deleteVoucherTemplateByTemplateId(templateId);
    }

    @Override
    public List<VoucherTemplateVO> selectlist() {
        return voucherTemplateMapper.selectlist();
    }

    @Override
    @Transactional
    public int toadd(TemPlateDTO temPlateDTO) {
        // 参数合法性判断
        if (temPlateDTO == null) {
            throw new IllegalArgumentException("传入的TemplateDTO对象不能为空");
        }

        VoucherTemplate voucherTemplate = new VoucherTemplate();
        //利用bean工具类复制
        BeanUtils.copyProperties(temPlateDTO, voucherTemplate);
        String randomNumbers = RandomUtil.randomNumbers(4);
        String key = "PZBM" + randomNumbers;
        //判断模板编码是否重复
        boolean b = voucherTemplateMapper.selectVoucherTemplateByTemplateEncoding(key);
        if (b) {
            throw new IllegalArgumentException("模板编码重复");
        }
        //重复后重新生成
        while (voucherTemplateMapper.selectVoucherTemplateByTemplateEncoding(key)) {
            randomNumbers = RandomUtil.randomNumbers(4);
            key = "PZBM" + randomNumbers;
        }
        voucherTemplate.setTemplateEncoding(key);
        voucherTemplate.setTemplateName(temPlateDTO.getTemplateName());
        voucherTemplate.setWordId(temPlateDTO.getWordId());
        voucherTemplate.setTypeId(temPlateDTO.getTypeId());


        try {
            // 插入主模板信息
            voucherTemplateMapper.insertVoucherTemplate(voucherTemplate);
        } catch (Exception e) {
            // 处理数据库插入异常
            throw new RuntimeException("插入VoucherTemplate失败", e);
        }

        List<VoucherTemplateDetail> voucherTemplateDetail = temPlateDTO.getVoucherTemplateDetail();

        // 模板详情列表判断
        if (voucherTemplateDetail != null && !voucherTemplateDetail.isEmpty()) {
            for (VoucherTemplateDetail templateDetail : voucherTemplateDetail) {
                VoucherTemplateDetail voucherTemplateDetail1 = new VoucherTemplateDetail();
               BeanUtils.copyProperties(temPlateDTO, voucherTemplateDetail1);
                voucherTemplateDetail1.setTemplateId(temPlateDTO.getTemplateId());
                voucherTemplateDetail1.setSummaryId(templateDetail.getSummaryId());
                voucherTemplateDetail1.setSubjectId(templateDetail.getSubjectId());
                voucherTemplateDetail1.setDirection(templateDetail.getDirection());
                voucherTemplateDetail1.setValidValues(templateDetail.getValidValues());

                try {
                    // 插入模板详情信息
                    voucherTemplateDetailMapper.insertVoucherTemplateDetail(voucherTemplateDetail1);
                } catch (Exception e) {
                    // 处理数据库插入异常
                    throw new RuntimeException("插入VoucherTemplateDetail失败", e);
                }
            }
        }

        return 1;
    }

    @Override
    public List<VoucherTemplateType> toselectTemplateType() {
        return voucherTemplateMapper.toselectTemplateType();
    }


}
